//
0x6080806040523461001657611e9d908161001c8239f35b600080fdfe6040608081526004908136101561001557600080fd5b600091823560e01c80631d9dbae41461108257806335984678146110295780633644e5151461100a57806339a4a24114610f9f578063485cc95514610c775780634965c7e114610c205780634b38b38514610ad05780634e93257e1461083f57806367efe82e146108125780637ecebe00146107ce578063937a7b2e1461053a578063b20187f1146104af578063b274703d1461041d578063b6d32d69146103e8578063b9d959fd14610396578063c3b3135e14610361578063c49f91d314610326578063f6a3d24e146102dc5763fd8fa0c1146100f257600080fd5b346102d85760c06003193601126102d85761010b61118d565b90602435906044359067ffffffffffffffff82116102d45761012f91369101611245565b6064929192359360ff851685036102cf5773ffffffffffffffffffffffffffffffffffffffff8760208183851698898252600383526101728b8320541515611bac565b6001546102326102408d6101af8a73ffffffffffffffffffffffffffffffffffffffff166000526002602052604060002090815491600183019055565b8151888101917fe36c3d5cb707dcfeb19a6a4b1d7b82c8c20d841769c752e659da03b2a8b729f9835233848301526060820152606081526101ef816112d2565b5190209051928391888301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b03601f1981018352826112ee565b5190208b5190815260ff919091166020820152608435604082015260a435606082015281805260809060015afa156102c4578386866102be96956102ae8b7f56c4adbfac097b5bec49fa8c702ae682a2d4c10bee1ac0aad3af7f3768d0fc0f9c9d976102b39751161461134a565b611c7b565b5193849333856113af565b0390a280f35b8751903d90823e3d90fd5b600080fd5b8580fd5b8280fd5b505034610322576020600319360112610322578060209273ffffffffffffffffffffffffffffffffffffffff61031061118d565b16815260038452205415159051908152f35b5080fd5b505034610322578160031936011261032257602090517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152f35b50503461032257816003193601126103225760209073ffffffffffffffffffffffffffffffffffffffff600754169051908152f35b50503461032257806003193601126103225760ff8160209373ffffffffffffffffffffffffffffffffffffffff6103cb61118d565b168152600585528181206024358252855220541690519015158152f35b50503461032257816003193601126103225760209073ffffffffffffffffffffffffffffffffffffffff600654169051908152f35b50503461032257806003193601126103225760209161043a61118d565b908273ffffffffffffffffffffffffffffffffffffffff918261045b6111d3565b168152600286522054835191858301937fe36c3d5cb707dcfeb19a6a4b1d7b82c8c20d841769c752e659da03b2a8b729f9855216848301526060820152606081526104a5816112d2565b5190209051908152f35b8382610120600319360112610322576104c661118d565b906104cf6111b0565b6064359173ffffffffffffffffffffffffffffffffffffffff831683036102cf5760a4359067ffffffffffffffff82116102d45761050f91369101611245565b60c4359160ff831683036102cf5761053795610104359560e4359560843592602435906113f9565b80f35b509190346103225760806003193601126103225761055661118d565b906024359060ff821682036107ca5773ffffffffffffffffffffffffffffffffffffffff8084169384865285602094859260038452610599868420541515611bac565b6102326106586105d56001549373ffffffffffffffffffffffffffffffffffffffff166000526002602052604060002090815491600183019055565b8851878101917fe36c3d5cb707dcfeb19a6a4b1d7b82c8c20d841769c752e659da03b2a8b729f98352338b830152606082015260608152610615816112d2565b5190208851928391888301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b519020855190815260ff9190911660208201526044356040820152606435606082015281805260809060015afa156107c05761069884828751161461134a565b60075416803b156107bc5784809160248451809481937f330c5a0e000000000000000000000000000000000000000000000000000000008352898c8401525af180156107b25761077f575b508394837f7fb1f1a379ee4b2c5e787bdcba983dff2cb148ae93c6341beafaca37b8ce8abe9495526003835285600183822060008155016107248154611c11565b8061073f575b5050859052825260008186205551338152a280f35b601f8111600114610759575060009150555b85388061072a565b90806000918452610778601f888620940160051c840160018501611c64565b5555610751565b936107ab7f7fb1f1a379ee4b2c5e787bdcba983dff2cb148ae93c6341beafaca37b8ce8abe9495611273565b93926106e3565b82513d87823e3d90fd5b8480fd5b81513d86823e3d90fd5b8380fd5b505034610322576020600319360112610322578060209273ffffffffffffffffffffffffffffffffffffffff61080261118d565b1681526002845220549051908152f35b50503461032257816003193601126103225761083b90610830611311565b905191829182611219565b0390f35b508290346103225760209182600319360112610acd5761085d61118d565b9173ffffffffffffffffffffffffffffffffffffffff61087b611311565b9316908551916060830183811067ffffffffffffffff821117610aa1578752602a83528583019387368637835115610a755760308553835190600191821015610a495790607860218601536029915b81831161097d575050506109225761083b61090c8761091888888888855196836108fd89955180928880890191016111f6565b840191518093868401906111f6565b010380855201836112ee565b5191829182611219565b60649085808851927f08c379a000000000000000000000000000000000000000000000000000000000845283015260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152fd5b909192600f81166010811015610a1d578651851015610a1d577f3031323334353637383961626364656600000000000000000000000000000000901a898588010153841c9280156109f1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0191906108ca565b6024826011877f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b6024836032887f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b806032857f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b806032847f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b6024856041857f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b80fd5b50346102d85760206003193601126102d85773ffffffffffffffffffffffffffffffffffffffff9081610b0161118d565b16928315610bc357600654923390841603610b665750507fffffffffffffffffffffffff00000000000000000000000000000000000000001681176006557fc64dd2865233a317a221a0952325ee30744b237e5b6e4367fff3aeea454dfee98280a280f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600f60248201527f696e76616c696420666163746f727900000000000000000000000000000000006044820152fd5b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600c60248201527f7a65726f206164647265737300000000000000000000000000000000000000006044820152fd5b50346102d85760206003193601126102d857602092829173ffffffffffffffffffffffffffffffffffffffff610c5461118d565b1680835260038652610c6a848420541515611bac565b8252845220549051908152f35b5090346102d857806003193601126102d857610c9161118d565b610c996111d3565b84549260ff8460081c161593848095610f92575b8015610f7b575b15610ef8578460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008316178855610eca575b507f696f49445265676973747279000000000000000000000000000000000000000060208251610d16816112b6565b600c815201527f310000000000000000000000000000000000000000000000000000000000000060208251610d4a816112b6565b600181520152805160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83527f04145c42dc91c070d3d51d42956bb4d907d74a0c89415a8794e8751005876e5d818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a083015260a0825260c082019682881067ffffffffffffffff891117610e9e575086905251902060015573ffffffffffffffffffffffffffffffffffffffff90817fffffffffffffffffffffffff0000000000000000000000000000000000000000931683600654161760065516906007541617600755610e4c575080f35b60207f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff845416845560018152a180f35b8860416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661010117865538610ce7565b60848660208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b158015610cb45750600160ff821614610cb4565b50600160ff821610610cad565b838261010060031936011261032257610fb661118d565b610fbe6111b0565b916084359067ffffffffffffffff82116107bc57610fde91369101611245565b60a4939193359060ff821682036102d4576105379460e4359460c43594606435913390602435906113f9565b5050346103225781600319360112610322576020906001549051908152f35b505034610322576020600319360112610322578060209273ffffffffffffffffffffffffffffffffffffffff61105d61118d565b1680825260038552611073838320541515611bac565b81526003845220549051908152f35b50503461032257602090816003193601126102d85773ffffffffffffffffffffffffffffffffffffffff6110b461118d565b16808452600383526110ca828520541515611bac565b8352600382526001918282852001825193858254926110e884611c11565b8088529383811690811561114b5750600114611110575b61083b8787610918828c03836112ee565b9080949750528583205b828410611138575050508261083b94610918928201019438806110ff565b805486850188015292860192810161111a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168887015250505050151560051b83010192506109188261083b38806110ff565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102cf57565b6044359073ffffffffffffffffffffffffffffffffffffffff821682036102cf57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102cf57565b60005b8381106112095750506000910152565b81810151838201526020016111f9565b601f19601f6040936020845261123e81518092816020880152602088880191016111f6565b0116010190565b9181601f840112156102cf5782359167ffffffffffffffff83116102cf57602083818601950101116102cf57565b67ffffffffffffffff811161128757604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040810190811067ffffffffffffffff82111761128757604052565b6080810190811067ffffffffffffffff82111761128757604052565b90601f601f19910116810190811067ffffffffffffffff82111761128757604052565b6040519061131e826112b6565b600782527f6469643a696f3a000000000000000000000000000000000000000000000000006020830152565b1561135157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f696e76616c6964207369676e61747572650000000000000000000000000000006044820152fd5b929380608095601f199473ffffffffffffffffffffffffffffffffffffffff601f951687526020870152606060408701528160608701528686013760008582860101520116010190565b91989092979394959660009473ffffffffffffffffffffffffffffffffffffffff8a1615611b4e5773ffffffffffffffffffffffffffffffffffffffff8416865260056020526040862085875260205260ff604087205416611af05773ffffffffffffffffffffffffffffffffffffffff8a16865260036020526040862054611a925773ffffffffffffffffffffffffffffffffffffffff6006541692604051937f683b9c2400000000000000000000000000000000000000000000000000000000855273ffffffffffffffffffffffffffffffffffffffff86166004860152602085602481845afa9485156119f5578895611a5e575b508415611a0057803b156119815787602491604051928380927f3540bae700000000000000000000000000000000000000000000000000000000825289600483015234905af180156119f5578c918e916119cd575b50602094928994926102326116296116539461158d6001549473ffffffffffffffffffffffffffffffffffffffff166000526002602052604060002090815491600183019055565b6040519073ffffffffffffffffffffffffffffffffffffffff8c8301937fe36c3d5cb707dcfeb19a6a4b1d7b82c8c20d841769c752e659da03b2a8b729f985521660408301526060820152606081526115e5816112d2565b5190206040519283918b8301958690916042927f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201520190565b51902092604051948594859094939260ff6060936080840197845216602083015260408201520152565b838052039060015afa156119c25761169973ffffffffffffffffffffffffffffffffffffffff891673ffffffffffffffffffffffffffffffffffffffff8651161461134a565b6116a58787878b611c7b565b73ffffffffffffffffffffffffffffffffffffffff6007541690604051907fda39b3e7000000000000000000000000000000000000000000000000000000008252600482015273ffffffffffffffffffffffffffffffffffffffff8916602482015273ffffffffffffffffffffffffffffffffffffffff8a16604482015260208160648188865af19081156118cf578590819261198d575b5060249192604051928380927fa27813350000000000000000000000000000000000000000000000000000000082528660048301525afa9081156118cf5785916118da575b5073ffffffffffffffffffffffffffffffffffffffff83163b156107bc5773ffffffffffffffffffffffffffffffffffffffff604051917f42842e0e000000000000000000000000000000000000000000000000000000008352818c16600484015216602482015283604482015284816064818373ffffffffffffffffffffffffffffffffffffffff88165af180156118cf576118bb575b5073ffffffffffffffffffffffffffffffffffffffff9693889693886118b69794604094827f9b3397f29f76b91430e368033ed86df2fc794753ab8239898fb655ab0213f8889d16855260046020528585205516825260056020528282209082526020522060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040519586951697856113af565b0390a2565b6118c58591611273565b6107ca573861181a565b6040513d87823e3d90fd5b90503d8086833e6118eb81836112ee565b8101906040818303126102d45780519173ffffffffffffffffffffffffffffffffffffffff8316830361198957602082015167ffffffffffffffff9283821161198557019080601f83011215611981578151928311611287576040519061195c6020601f19601f87011601836112ee565b83825260208484010111611981579060208061197b94930191016111f6565b38611782565b8780fd5b8880fd5b8680fd5b9150506020813d6020116119ba575b816119a9602093836112ee565b810103126102cf575184602461173d565b3d915061199c565b6040513d85823e3d90fd5b926116539194926102326116299b6119e760209997611273565b9b5050929491509294611545565b6040513d8a823e3d90fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c69642070726f6a65637400000000000000000000000000000000006044820152fd5b9094506020813d602011611a8a575b81611a7a602093836112ee565b81010312611981575193386114f0565b3d9150611a6d565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f64657669636520657869737473000000000000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6e667420616c72656164792075736564000000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f64657669636520697320746865207a65726f20616464726573730000000000006044820152fd5b15611bb357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f646576696365206e6f74206578697374730000000000000000000000000000006044820152fd5b90600182811c92168015611c5a575b6020831014611c2b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f1691611c20565b818110611c6f575050565b60008155600101611c64565b9290918215611e325773ffffffffffffffffffffffffffffffffffffffff600094168452602090600382526040852093845560018094019467ffffffffffffffff8411611e0557611ccc8654611c11565b601f8111611dcc575b508092601f8511600114611d4d575092939291849182611d22575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff91921b9260031b1c1916179055565b013591507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff38611cf0565b86825280822093918591601f19831691905b88838310611db25750505010611d7a575b505050811b019055565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055388080611d70565b868601358855909601959384019387935090810190611d5f565b611df590878352848320601f870160051c810191868810611dfb575b601f0160051c0190611c64565b38611cd5565b9091508190611de8565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526041600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f656d7074792068617368000000000000000000000000000000000000000000006044820152fdfea164736f6c6343000813000a