0x608060405234801562000010575f80fd5b506200001b62000021565b620000df565b5f54610100900460ff16156200008d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614620000dd575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b614d0980620000ed5f395ff3fe6080604052600436106103b3575f3560e01c80637d1e8c55116101e9578063b837dbe911610108578063d05d9c3d1161009d578063e196fb5d1161006d578063e196fb5d14610b42578063e97a1e9e14610b61578063f5b541a614610bd3578063f93e985714610c06575f80fd5b8063d05d9c3d14610abb578063d547741f14610ada578063d5d4b83514610af9578063d84f91e814610b0f575f80fd5b8063c1dc0f07116100d8578063c1dc0f0714610a43578063c211697414610a58578063cc5782f614610a77578063cd9b9e9a14610aa5575f80fd5b8063b837dbe9146109b8578063bc61e733146109cd578063bf3e7505146109fb578063c0729ab114610a2e575f80fd5b80639f3ce55a1161017e578063ac1eff681161014e578063ac1eff6814610939578063ad422ff01461097b578063aea4f74514610990578063b4a5a4b7146109a4575f80fd5b80639f3ce55a146108e0578063a217fddf146108f3578063abd6230d14610906578063abffac321461091a575f80fd5b806391d14854116101b957806391d148541461085a578063921b278e146108ab578063986fcddd146107d05780639ee8b211146108c1575f80fd5b80637d1e8c55146107d05780638116d995146107e35780638be745d114610802578063914e57eb1461082e575f80fd5b80635355420e116102d557806363a283931161026a578063695378f51161023a578063695378f5146107875780636a637967146105835780636e6738431461079d57806373bd07b714610430575f80fd5b806363a28393146106e45780636463fb2a1461070357806366f96e981461072257806367e404ce1461074e575f80fd5b80635c721a0c116102a55780635c721a0c146106355780635ed73ceb146106605780636078bfd81461068c57806360e83cf3146106b8575f80fd5b80635355420e146105e2578063557eac731461060157806358794456146106205780635b7eb4bd14610583575f80fd5b80632c70645c1161034b57806342fbe8421161031b57806342fbe8421461056457806348922ab714610583578063491e0936146105975780634cdd389b146105b6575f80fd5b80632c70645c146104e55780632f2ff15d146104fb57806336568abe1461051a5780633fc08b6514610539575f80fd5b80631e2ff94f116103865780631e2ff94f146104565780631f443da01461046c578063248a9ca31461049857806328958174146104c6575f80fd5b806301ffc9a7146103b757806305861180146103eb5780631065a3991461040f57806311314d0f14610430575b5f80fd5b3480156103c2575f80fd5b506103d66103d136600461412d565b610c32565b60405190151581526020015b60405180910390f35b3480156103f6575f80fd5b506104016101bb5481565b6040519081526020016103e2565b34801561041a575f80fd5b5061042e61042936600461416c565b610cca565b005b34801561043b575f80fd5b50610444600281565b60405160ff90911681526020016103e2565b348015610461575f80fd5b506104016101185481565b348015610477575f80fd5b5061040161048636600461418c565b6101b96020525f908152604090205481565b3480156104a3575f80fd5b506104016104b236600461418c565b5f9081526065602052604090206001015490565b3480156104d1575f80fd5b5061042e6104e036600461418c565b610da2565b3480156104f0575f80fd5b506104016101835481565b348015610506575f80fd5b5061042e6105153660046141c4565b610e62565b348015610525575f80fd5b5061042e6105343660046141c4565b610e8b565b348015610544575f80fd5b5061040161055336600461418c565b60a56020525f908152604090205481565b34801561056f575f80fd5b5061042e61057e36600461423a565b610f3e565b34801561058e575f80fd5b50610444600181565b3480156105a2575f80fd5b5061042e6105b13660046142c5565b611209565b3480156105c1575f80fd5b506104016105d036600461418c565b6101b76020525f908152604090205481565b3480156105ed575f80fd5b5061042e6105fc366004614355565b611531565b34801561060c575f80fd5b5061042e61061b36600461418c565b611968565b34801561062b575f80fd5b5061040160995481565b348015610640575f80fd5b5061040161064f36600461418c565b60a66020525f908152604090205481565b34801561066b575f80fd5b5061040161067a36600461418c565b6101ba6020525f908152604090205481565b348015610697575f80fd5b506104016106a636600461418c565b6101b66020525f908152604090205481565b3480156106c3575f80fd5b506104016106d236600461418c565b6101506020525f908152604090205481565b3480156106ef575f80fd5b5061042e6106fe3660046143fa565b611a2e565b34801561070e575f80fd5b5061042e61071d366004614434565b611a57565b34801561072d575f80fd5b5061040161073c36600461418c565b6101b86020525f908152604090205481565b348015610759575f80fd5b50610762611f3f565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103e2565b348015610792575f80fd5b506104016101195481565b3480156107a8575f80fd5b506104017f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c81565b3480156107db575f80fd5b506104445f81565b3480156107ee575f80fd5b5061042e6107fd36600461446c565b611f77565b34801561080d575f80fd5b5061040161081c36600461418c565b61011a6020525f908152604090205481565b348015610839575f80fd5b5061040161084836600461418c565b61014e6020525f908152604090205481565b348015610865575f80fd5b506103d66108743660046141c4565b5f91825260656020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156108b6575f80fd5b506104016101bf5481565b3480156108cc575f80fd5b506103d66108db36600461418c565b61217c565b61042e6108ee3660046144d3565b61219f565b3480156108fe575f80fd5b506104015f81565b348015610911575f80fd5b50610444600381565b348015610925575f80fd5b5061042e61093436600461451f565b61230c565b348015610944575f80fd5b5061076261095336600461418c565b61011b6020525f908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b348015610986575f80fd5b5061040160985481565b34801561099b575f80fd5b5061042e61244b565b3480156109af575f80fd5b50610444600481565b3480156109c3575f80fd5b5061040160e45481565b3480156109d8575f80fd5b506103d66109e736600461416c565b60da54600160ff9092169190911b16151590565b348015610a06575f80fd5b506104017f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d8281565b348015610a39575f80fd5b50610401609a5481565b348015610a4e575f80fd5b5061040160975481565b348015610a63575f80fd5b5061042e610a7236600461458d565b6124a6565b348015610a82575f80fd5b506103d6610a9136600461418c565b60d96020525f908152604090205460ff1681565b348015610ab0575f80fd5b506104016101bd5481565b348015610ac6575f80fd5b5061042e610ad53660046145b7565b6125d3565b348015610ae5575f80fd5b5061042e610af43660046141c4565b612808565b348015610b04575f80fd5b506104016101bc5481565b348015610b1a575f80fd5b506104017f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a2681565b348015610b4d575f80fd5b5061042e610b5c36600461416c565b61282c565b348015610b6c575f80fd5b50610401604080515f602082018190529181018290527f072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd60608201526080810182905260a081019190915260c0016040516020818303038152906040528051906020012081565b348015610bde575f80fd5b506104017f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b348015610c11575f80fd5b50610401610c2036600461418c565b6101be6020525f908152604090205481565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610cc457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26610cf4816128d7565b60da54600160ff84161b16610d3f576040517fb015579f00000000000000000000000000000000000000000000000000000000815260ff831660048201526024015b60405180910390fd5b60da8054600160ff851690811b199091169091557fef04ba2036ccaeab3a59717b51d2b9146b0b0904077177f1148a5418bf1eae23335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a25050565b7f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c610dcc816128d7565b5f82815261011b6020908152604080832054905173ffffffffffffffffffffffffffffffffffffffff90911681523392859290917f4a29db3fc6b42bda201e4b4d69ce8d575eeeba5f153509c0d0a342af0f1bd021910160405180910390a4505f90815261011b6020526040902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b5f82815260656020526040902060010154610e7c816128d7565b610e8683836128e1565b505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610d36565b610f3a82826129d3565b5050565b6004610f4981612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929610f73816128d7565b845f819003610fae576040517fb1504a5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610119545f908190610ffa60408051610100810182525f6080820181815260a0830182905260c0830182905260e083018290528252602082015260609181018290528181019190915290565b5f8981526101be60205260408120548a915b87811015611106578d8d8281811061102657611026614605565b90506020028101906110389190614632565b6110419061476b565b81499650935085611081576040517fc0e41e1d00000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b835161108e908387612b12565b8351606001515f90815260208790526040902096506110be86885f1c866020015187604001518860600151612c79565b83516060808201519151602080880151604080519889529188019490945286810191909152908501899052608085019190915260a0909320845190930151915060010161100c565b50818a1461114a576040517fd3664fb3000000000000000000000000000000000000000000000000000000008152600481018b905260248101839052604401610d36565b5f8281526101be602052604090205415611193576040517f0f06cd1500000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f8281526101be6020526040812082905581908e908e90816111b7576111b7614605565b90506020028101906111c99190614632565b6040516020909101359084907f52bd912b0041a6ec8554b0ffae3cc1cb7b137bade0dc9e3f8f0b6758466d5df9905f90a450505050505050505050505050565b611211612e51565b85878484875f5a90506112246003612a8c565b61125861125260017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b8f612eee565b5f8e8e8e8e8b8e8e60405160200161127697969594939291906148aa565b60405160208183030381529060405280519060200120905061129781612ef5565b6112a96112a48d8f614902565b612f4f565b5f808f73ffffffffffffffffffffffffffffffffffffffff168e8d8d6040516112d3929190614915565b5f6040518083038185875af1925050503d805f811461130d576040519150601f19603f3d011682016040523d82523d5f602084013e611312565b606091505b50915091508161137c5780511561132c5780518082602001fd5b8f6040517f54613443000000000000000000000000000000000000000000000000000000008152600401610d36919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6113b06113aa60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b5f612eee565b60405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e905f90a250508615905061151957855f84900361146857853b158015611466573a5a61140461bc7c86614902565b61140e9190614850565b6114189190614924565b9150818811156114625773ffffffffffffffffffffffffffffffffffffffff87166108fc611446848b614850565b6040518115909202915f818181858888f1935050505050611466565b8791505b505b5f73ffffffffffffffffffffffffffffffffffffffff84161561148b578361148d565b335b90505f8173ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050905080611515576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610d36565b5050505b505050505050611527612fc4565b5050505050505050565b5f54610100900460ff161580801561154f57505f54600160ff909116105b806115685750303b15801561156857505f5460ff166001145b6115f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d36565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611650575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff881661169d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b85811015611774575f8787838181106116ba576116ba614605565b90506020020160208101906116cf919061493b565b73ffffffffffffffffffffffffffffffffffffffff160361171c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61176c7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92988888481811061175257611752614605565b9050602002016020810190611767919061493b565b6128e1565b60010161169f565b5061177f5f886128e1565b6117a97f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c886128e1565b6117b587888686612ff2565b7f033d11f27e62ab919708ec716731da80d261a6e4253259b7acde9bf89d28ec1880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a161790556101198990555f89815261011a602090815260408083208d905580518083018490528082018490527f072ead6777750dc20232d1cee8dc9a395c2d350df4bbaa5096c6f59b214dcecd60608083018290526080830186905260a08084018790528451808503909101815260c08401855280519086012086526101be85528386208f905560e08301869052610100830186905261012083019190915261014082018590526101608083018690528351808403909101815261018083019384905280519401939093206101bd558382526101a08101939093526101c090920184905290206101bf55801561195c575f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82611992816128d7565b5f805f4260995410156119b7576097546119ac9042614902565b6099555060016119c9565b609a548510156119c957849250600191505b609885905580806119d75750815b156119e257609a8390555b60408051868152831515602082015282151581830152905133917fbc3dc0cb5c15c51c81316450d44048838bb478b9809447d01c766a06f3e9f2c8919081900360600190a25050505050565b6001611a39816131a3565b5f611a43816128d7565b611a5183610119545f6131ea565b50505050565b611a5f612e51565b60a08101803590611a73906080840161493b565b611a81610120840184614956565b611a92610100860160e0870161493b565b5f5a9050611aa06003612a8c565b6101008701355f908152610150602052604081205490819003611aef576040517f4e68667500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611af988806149b7565b90508114611b485780611b0c89806149b7565b6040517f5e3fd6ad0000000000000000000000000000000000000000000000000000000081526004810193909352602483015250604401610d36565b611b5588602001356134df565b611b6a6112a460c08a013560a08b0135614902565b5f611b7b60808a0160608b0161493b565b611b8b60a08b0160808c0161493b565b60a08b013560c08c013560208d0135611ba86101208f018f614956565b604051602001611bbe97969594939291906148aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905280516020909101209050611c1f81611c048b806149b7565b611c1460608e0160408f01614a1b565b8d6101000135613557565b611c55576040517fb05e92fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c98611c8360017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b611c9360808c0160608d0161493b565b612eee565b5f80611caa60a08c0160808d0161493b565b73ffffffffffffffffffffffffffffffffffffffff1660c08c0135611cd36101208e018e614956565b604051611ce1929190614915565b5f6040518083038185875af1925050503d805f8114611d1b576040519150601f19603f3d011682016040523d82523d5f602084013e611d20565b606091505b509150915081611d9557805115611d3a5780518082602001fd5b611d4a60a08c0160808d0161493b565b6040517f5461344300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d36565b611dc36113aa60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b60405183907fa4c827e719e911e8f19393ccdb85b5102f08f0910604d340ba38390b7ff2ab0e905f90a2505050505f861115611f2e57855f849003611e7d57853b158015611e7b573a5a611e1961bc7c86614902565b611e239190614850565b611e2d9190614924565b915081881115611e775773ffffffffffffffffffffffffffffffffffffffff87166108fc611e5b848b614850565b6040518115909202915f818181858888f1935050505050611e7b565b8791505b505b5f73ffffffffffffffffffffffffffffffffffffffff841615611ea05783611ea2565b335b90505f8173ffffffffffffffffffffffffffffffffffffffff166108fc8490811502906040515f60405180830381858888f19350505050905080611f2a576040517fa57c4df400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83166004820152602401610d36565b5050505b505050505050611f3c612fc4565b50565b5f611f72611f6e60017f3095e8dc547eeb8bf90020768c67e29e974614469d8f71638ac29f39b96e4893614850565b5c90565b905090565b5f54600590610100900460ff16158015611f9757505f5460ff8083169116105b612023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610d36565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055838214612096576040517f2526f1080000000000000000000000000000000000000000000000000000000081526004810185905260248101839052604401610d36565b5f5b848110156120f0578383828181106120b2576120b2614605565b905060200201356101be5f8888858181106120cf576120cf614605565b602090810292909201358352508101919091526040015f2055600101612098565b506101bb546101bc546101185460408051938452602084019290925290820152606090206101bf555f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600881901c5f90815261014f6020526040812054600160ff84161b161515610cc4565b60026121aa81612a8c565b73ffffffffffffffffffffffffffffffffffffffff85166121f7576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b34841115612231576040517fb03b693200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60e480545f918261224183614a3e565b9091555090505f6122528634614850565b90505f33888884868a8a60405160200161227297969594939291906148aa565b60405160208183030381529060405280519060200120905061229483826135eb565b808873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe856c2b8bd4eb0027ce32eeaf595c21b0b6b4644b326e5b7bd80a1cf8db72e6c8a86888c8c6040516122fa959493929190614a75565b60405180910390a45050505050505050565b600461231781612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612341816128d7565b5f85900361237b576040517f7907d79b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610119545f81815261011a60205260409020548435146123c7576040517fead4c30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101bd5460208501358114612415576040517f2f22b98a0000000000000000000000000000000000000000000000000000000081526004810182905260208601356024820152604401610d36565b5f612422868460016131ea565b90505f61243187848487613667565b905061195c81898c8c8b3560408d013560a08e01356136ef565b7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82612475816128d7565b5f609a81905560405133917fba88c025b0cbb77022c0c487beef24f759f1e4be2f51a205bc427cee19c2eaa691a250565b7f32937fd5162e282df7e9a14a5073a2425321c7966eaf70ed6c838a1006d84c4c6124d0816128d7565b73ffffffffffffffffffffffffffffffffffffffff831661251d576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f82815261011b602090815260409182902054915173ffffffffffffffffffffffffffffffffffffffff928316815233928592908716917f4a29db3fc6b42bda201e4b4d69ce8d575eeeba5f153509c0d0a342af0f1bd021910160405180910390a4505f90815261011b6020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60046125de81612a8c565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929612608816128d7565b6126156080860186614956565b90505f0361264f576040517fc01eab5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051608080820183528735825260208089013590830152878301359282019290925260608088013590820152905f9061268c90880188614956565b60405161269a929190614915565b604051809103902090506126c4826101be5f8981526020019081526020015f205461011954612b12565b60608701355f90815260208290526040812090505f612727888a606001358b5f0135856127008e80608001906126fa9190614956565b896138a6565b604080519586526020860194909452928401919091526060830152608082015260a0902090565b905080871461276c576040517fd3664fb30000000000000000000000000000000000000000000000000000000081526004810188905260248101829052604401610d36565b5f8181526101be6020526040902054156127b5576040517f0f06cd1500000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b5f8181526101be60209081526040808320818d01359081905590519092918c01359184917f52bd912b0041a6ec8554b0ffae3cc1cb7b137bade0dc9e3f8f0b6758466d5df99190a4505050505050505050565b5f82815260656020526040902060010154612822816128d7565b610e8683836129d3565b7f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26612856816128d7565b60da54600160ff84161b161561289d576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610d36565b60da8054600160ff851690811b9091179091557fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d33610d76565b611f3c81336139a7565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f3a575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556129753390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1615610f3a575f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60da54600160ff83161b811615612ad4576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff83166004820152602401610d36565b6002811615610f3a576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260016004820152602401610d36565b8251612b4a576040517f2898482a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060830151612b85576040517f7dc2487d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82602001518260010114612bd75760208301516040517fabefa5e80000000000000000000000000000000000000000000000000000000081526001840160048201526024810191909152604401610d36565b80836020015111612c245760208301516040517fa386ed70000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610d36565b826040015183602001511115610e8657602083015160408085015190517fcbbd795300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610d36565b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001840693505f80600a73ffffffffffffffffffffffffffffffffffffffff168787878787604051602001612cd1959493929190614ac7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612d0991614b10565b5f60405180830381855afa9150503d805f8114612d41576040519150601f19603f3d011682016040523d82523d5f602084013e612d46565b606091505b509150915081612d82576040517fa71194af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040815114612dca578051604080517ff75db381000000000000000000000000000000000000000000000000000000008152610d369290600401918252602082015260400190565b6020810151604082015161100082141580612e0557507f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018114155b15612e46576040517f68dcad5f0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610d36565b505050505050505050565b5f612e80611f6e60017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b14612eb7576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612eec612ee560017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b6001612eee565b565b80825d5050565b5f81815260a66020526040902054600114612f3f576040517f992d87c300000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b5f90815260a66020526040812055565b5f426099541015612f7157609754612f679042614902565b6099555080612f82565b81609a54612f7f9190614902565b90505b609854811115612fbe576040517fa74c1c5f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b609a5550565b612eec6113aa60017f084edf88d5959696dcc7aab5c8674a33a1ef78f37dda21b782ed03bddb22ade5614850565b5f54610100900460ff16613088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b73ffffffffffffffffffffffffffffffffffffffff84166130d5576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316613122576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61312a613a60565b613132613a60565b61313a613a60565b6131448282613af6565b61316e7f1185e52d62bfbbea270e57d3d09733d221b53ab7a18bae82bb3c6c74bab16d82856128e1565b6131987f356a809dfdea9198dd76fb76bf6d403ecf13ea675eb89e1eda2db2c4a4676a26846128e1565b5050600160e4555050565b60da54600160ff83161b1615611f3c576040517fdb246dde00000000000000000000000000000000000000000000000000000000815260ff82166004820152602401610d36565b5f8284604001351161323557604080517f7061440500000000000000000000000000000000000000000000000000000000815290850135600482015260248101849052604401610d36565b613249846101a00135856101600135613c63565b6101bf5460408051610180870135815261014087013560208201526101008701359181019190915260609020146132e157604080516101808601358152610140860135602082015261010086013591810191909152606090206101bf546040517fbc5aad1100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610d36565b428461012001351061332c576040517fbf81c6e00000000000000000000000000000000000000000000000000000000081526101208501356004820152426024820152604401610d36565b60a0840135613367576040517f2898482a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516060868101358252608080880135602084015260a0808901359484019490945260c08801359183019190915260e087013590820152205f8181526101be6020526040908190205491925085013514613409575f8181526101be6020526040908190205481517ffb4cd6ef0000000000000000000000000000000000000000000000000000000081529186013560048301526024820152604401610d36565b61342561341a6101e08601866149b7565b866101c00135613d30565b61343c613436610200860186614956565b85613e36565b6040808501355f81815261011a6020529190912060a08601359055610119556101bd8190556134906101a0850135610160860135610120870135604080519384526020840192909252908201526060902090565b6101bf5560408051831515815260a08601359186359190870135907f1335f1a2b3ff25f07f5fef07dd35d8fb4312c3c73b138e2fad9347b3319ab53c9060200160405180910390a49392505050565b600881901c5f90815261014f6020526040902054600160ff83161b1615613535576040517f335a4a9000000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b600881901c5f90815261014f602052604090208054600160ff84161b17905550565b5f85815b858110156135de57600163ffffffff8616821c811690036135a8576135a187878381811061358b5761358b614605565b90506020020135835f9182526020526040902090565b91506135d6565b6135d3828888848181106135be576135be614605565b905060200201355f9182526020526040902090565b91505b60010161355b565b5090911495945050505050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82015f90815261014e60208181526040808420548452848252808420868552929091528083208290555190918391839186917fea3b023b4c8680d4b4824f0143132c95476359a2bb70a81d6c5a36f6918f63399190a4505050565b5f60405184815283602082015260406101008701604083013782608082015260206040870160a083013760a0610140870160c083013761018081016102208701356020810261024089018337602002902061016082015261018090207f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001900695945050505050565b6040805160018082528183019092525f916020808301908036833701905050905087815f8151811061372357613723614605565b6020908102919091018101919091525f88815261011b909152604090205473ffffffffffffffffffffffffffffffffffffffff168061378e576040517f69ed70ab00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f7e4f7a8a0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff831690637e4f7a8a906137e6908b908b908890600401614b21565b6020604051808303815f875af1158015613802573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138269190614b78565b90508061385f576040517f09bde33900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518781526020810186905286917f5c885a794662ebe3b08ae0874fc2c88b5343b0223ba9cd2cad92b69c0d0c901f910160405180910390a250505050505050505050565b5f6138b2602084614b97565b156138e9576040517f6426c6c500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f729eebce00000000000000000000000000000000000000000000000000000000835b801561399e57602081039050808601357fff0000000000000000000000000000000000000000000000000000000000000081161561394f57604051838152600481fd5b7f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001817f73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff000000018787090893505061390c565b50509392505050565b5f82815260656020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610f3a576139e681613eca565b6139f1836020613ee9565b604051602001613a02929190614bcf565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527f08c379a0000000000000000000000000000000000000000000000000000000008252610d3691600401614c4f565b5f54610100900460ff16612eec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b5f54610100900460ff16613b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610d36565b815f03613bc5576040517fb5ed5a3b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805f03613bfe576040517fd10d72bb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60978290556098819055613c128242614902565b60998190556097546098546040805192835260208301919091528101919091527f8f805c372b66240792580418b7328c0c554ae235f0932475c51b026887fe26a99060600160405180910390a15050565b815f03613ca5578015610f3a576040517f0c25659200000000000000000000000000000000000000000000000000000000815260048101829052602401610d36565b80613cdf576040517f5228f4c800000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f82815261014e60205260409020548114610f3a576040517f36459fa00000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610d36565b5f5b82811015611a51576101505f858584818110613d5057613d50614605565b9050602002013581526020019081526020015f20545f14613db957838382818110613d7d57613d7d614605565b905060200201356040517fe5d14425000000000000000000000000000000000000000000000000000000008152600401610d3691815260200190565b816101505f868685818110613dd057613dd0614605565b9050602002013581526020019081526020015f208190555081848483818110613dfb57613dfb614605565b905060200201357f300e6f978eee6a4b0bba78dd8400dc64fd5652dbfc868a2258e16d0977be222b60405160405180910390a3600101613d32565b613e41600283614b97565b15613e7b576040517f0c91d77600000000000000000000000000000000000000000000000000000000815260048101839052602401610d36565b5f805b83811015613ec3576040518582013560f01c9250838301907f3c116827db9db3a30c1a25db8b0ee4bab9d2b223560209cfd839601b621c726d905f90a2600201613e7e565b5050505050565b6060610cc473ffffffffffffffffffffffffffffffffffffffff831660145b60605f613ef7836002614924565b613f02906002614902565b67ffffffffffffffff811115613f1a57613f1a61466e565b6040519080825280601f01601f191660200182016040528015613f44576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000815f81518110613f7a57613f7a614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110613fdc57613fdc614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f614016846002614924565b614021906001614902565b90505b60018111156140bd577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061406257614062614605565b1a60f81b82828151811061407857614078614605565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060049490941c936140b681614c9f565b9050614024565b508315614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610d36565b9392505050565b5f6020828403121561413d575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114614126575f80fd5b5f6020828403121561417c575f80fd5b813560ff81168114614126575f80fd5b5f6020828403121561419c575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611f3c575f80fd5b5f80604083850312156141d5575f80fd5b8235915060208301356141e7816141a3565b809150509250929050565b5f8083601f840112614202575f80fd5b50813567ffffffffffffffff811115614219575f80fd5b6020830191508360208260051b8501011115614233575f80fd5b9250929050565b5f805f806060858703121561424d575f80fd5b843567ffffffffffffffff811115614263575f80fd5b61426f878288016141f2565b90989097506020870135966040013595509350505050565b5f8083601f840112614297575f80fd5b50813567ffffffffffffffff8111156142ae575f80fd5b602083019150836020828501011115614233575f80fd5b5f805f805f805f8060e0898b0312156142dc575f80fd5b88356142e7816141a3565b975060208901356142f7816141a3565b965060408901359550606089013594506080890135614315816141a3565b935060a089013567ffffffffffffffff811115614330575f80fd5b61433c8b828c01614287565b999c989b50969995989497949560c00135949350505050565b5f805f805f805f805f6101008a8c03121561436e575f80fd5b8935985060208a0135975060408a0135614387816141a3565b965060608a0135614397816141a3565b955060808a013567ffffffffffffffff8111156143b2575f80fd5b6143be8c828d016141f2565b9a9d999c50979a9699979860a08801359760c0810135975060e0013595509350505050565b5f61022082840312156143f4575f80fd5b50919050565b5f6020828403121561440a575f80fd5b813567ffffffffffffffff811115614420575f80fd5b61442c848285016143e3565b949350505050565b5f60208284031215614444575f80fd5b813567ffffffffffffffff81111561445a575f80fd5b82016101408185031215614126575f80fd5b5f805f806040858703121561447f575f80fd5b843567ffffffffffffffff80821115614496575f80fd5b6144a2888389016141f2565b909650945060208701359150808211156144ba575f80fd5b506144c7878288016141f2565b95989497509550505050565b5f805f80606085870312156144e6575f80fd5b84356144f1816141a3565b935060208501359250604085013567ffffffffffffffff811115614513575f80fd5b6144c787828801614287565b5f805f8060608587031215614532575f80fd5b843567ffffffffffffffff80821115614549575f80fd5b61455588838901614287565b9096509450602087013593506040870135915080821115614574575f80fd5b50614581878288016143e3565b91505092959194509250565b5f806040838503121561459e575f80fd5b82356145a9816141a3565b946020939093013593505050565b5f805f606084860312156145c9575f80fd5b833567ffffffffffffffff8111156145df575f80fd5b840160a081870312156145f0575f80fd5b95602085013595506040909401359392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f82357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff21833603018112614664575f80fd5b9190910192915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516080810167ffffffffffffffff811182821017156146be576146be61466e565b60405290565b5f82601f8301126146d3575f80fd5b813567ffffffffffffffff808211156146ee576146ee61466e565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156147345761473461466e565b8160405283815286602085880101111561474c575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f81360360e081121561477c575f80fd5b61478461469b565b6080821215614791575f80fd5b61479961469b565b9150833582526020840135602083015260408401356040830152606084013560608301528181526080840135602082015260a0840135915067ffffffffffffffff808311156147e6575f80fd5b6147f2368487016146c4565b604083015260c085013592508083111561480a575f80fd5b50614817368386016146c4565b60608201529392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810381811115610cc457610cc4614823565b81835281816020850137505f602082840101525f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff808a16835280891660208401525086604083015285606083015284608083015260c060a08301526148f560c083018486614863565b9998505050505050505050565b80820180821115610cc457610cc4614823565b818382375f9101908152919050565b8082028115828204841417610cc457610cc4614823565b5f6020828403121561494b575f80fd5b8135614126816141a3565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614989575f80fd5b83018035915067ffffffffffffffff8211156149a3575f80fd5b602001915036819003821315614233575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126149ea575f80fd5b83018035915067ffffffffffffffff821115614a04575f80fd5b6020019150600581901b3603821315614233575f80fd5b5f60208284031215614a2b575f80fd5b813563ffffffff81168114614126575f80fd5b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614a6e57614a6e614823565b5060010190565b858152846020820152836040820152608060608201525f614a9a608083018486614863565b979650505050505050565b5f5b83811015614abf578181015183820152602001614aa7565b50505f910152565b8581528460208201528360408201525f8351614aea816060850160208801614aa5565b835190830190614b01816060840160208801614aa5565b01606001979650505050505050565b5f8251614664818460208701614aa5565b604081525f614b34604083018587614863565b8281036020848101919091528451808352858201928201905f5b81811015614b6a57845183529383019391830191600101614b4e565b509098975050505050505050565b5f60208284031215614b88575f80fd5b81518015158114614126575f80fd5b5f82614bca577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500690565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614c06816017850160208801614aa5565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614c43816028840160208801614aa5565b01602801949350505050565b602081525f8251806020840152614c6d816040850160208701614aa5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b5f81614cad57614cad614823565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220e4afa785eb57ac64afa186d525ee007aa6573b14ea1fa88d7b9870e53f7c587164736f6c63430008180033